#define _CRT_SECURE_NO_WARNINGS  1
#include"seqlist.h"

void initseq(sl* L)
{
	assert(L);

	L->arr = (datatype*)malloc(sizeof(datatype) * INIT);
	L->capacity = INIT;
	L->size = 0;
}

void check(sl* L)
{
	assert(L);

	if (L->capacity == L->size)
	{
		sl* new = realloc(L->arr, sizeof(datatype) * 2 * L->capacity);
		if (new)
		{
			L->arr = new;
			L->capacity*=2;
			printf("Add Finish\n");
		}
		else
			return;
	}
}


void pushback(sl* L,datatype x)
{
	assert(L);

	check(L);

	L->arr[L->size] = x;
	(L->size)++;

}

void print(sl* L)
{
	assert(L);

	int i = 0;
	for (i = 0; i < L->size; i++)
	{
		printf("%d ", L->arr[i]);
	}
	printf("\n");
}

void popback(sl* L)
{
	assert(L);
	assert(L->size>0);

	if (L->size == 0)
		return;
	L->size--;
}


void pushfront(sl* L,datatype x)
{
	assert(L);

	check(L);

	int end = L->size - 1;
	while (end>=0)
	{
		L->arr[end + 1] = L->arr[end];
		end--;
	}

	L->arr[0] = x;
	L->size++;
}

void popfront(sl* L)
{
	assert(L->size>0);
	assert(L);


	int begin = 0;
	while (begin<L->size)
	{
		L->arr[begin] = L->arr[begin+1];
		begin++;
	}
	L->size--;
}

int slfind(sl* L,datatype x)
{
	assert(L);

	int i = 0;
	for (i = 0; i < L->size; i++)
	{
		if (L->arr[i] == x)
			return 1;
	}
	return -1;
}

void insert(sl* L, int pos, datatype x)
{
	assert(L);
	assert(pos >= 0&&pos<=L->size);

	check(L);

	int end = L->size - 1;
	while (end >= pos)
	{
		L->arr[end+1] = L->arr[end];
		end--;
	}
	L->arr[pos] = x;
	L->size++;
}

void pop(sl* L, int pos)
{
	assert(L);
	assert(pos >= 0 && pos <= L->size);
	assert(L->size > 0);

	int begin = pos;

	while (begin < L->size)
	{
		L->arr[begin] = L->arr[begin + 1];
			begin++;
	}

	L->size--;
}